Seu descanso merece uma boa rede.

Redes de qualidade para sua casa, varanda, sítio ou aquele momento especial de relaxar.

📱 Comprar pelo WhatsApp

QUALIDADE

Produtos selecionados

😴

CONFORTO

Pensados para o seu descanso

💬

ATENDIMENTO

Rápido pelo WhatsApp

🚚

FACILIDADE

Pedido simples e entrega

🔥 Os favoritos dos nossos clientes

🎁 Ofertas especiais

🛒 Seu carrinho
if (!window.esc) { window.esc = s => String(s ?? '').replace(/[&<>"]/g, c => ({ '&': '&', '<': '<', '>': '>', '"': '"' }[c])); } function jsonAttr(s) { return String(s ?? '').replace(/[&"]/g, c => ({ '&': '&', '"': '"' }[c])); } function gimgs(p) { const a = [p.image, p.image2, p.image3].filter(Boolean); return a.length ? a : null; } function galMain(p) { const a = gimgs(p); return a ? `` : '🛏️'; } function galMainBig(p) { const a = gimgs(p); if (!a) return '🛏️'; return `` + (a.length > 1 ? `
${a.map((u, ix) => ``).join('')}
` : ''); } function pmSwap(u, el) { const m = document.getElementById('pmMainImg'); if (m) m.src = u; document.querySelectorAll('#prodModalBody [onclick^="pmSwap"]').forEach(t => t.style.border = 'none'); el.style.border = '2px solid var(--verde)'; } let waNumber = '55879999900000'; let products = [], categories = [], cart = JSON.parse(localStorage.getItem('zr_cart') || '[]'); let currentView = 'home', curProduct = null, curQty = 1; const waLink = (msg) => `https://wa.me/${waNumber}?text=${encodeURIComponent(msg)}`; async function init() { try { const [pRes, cRes, sRes] = await Promise.all([ fetch('/api/products'), fetch('/api/categories'), fetch('/api/settings') ]); const pD = await pRes.json(), cD = await cRes.json(), sD = await sRes.json(); products = pD.products || []; categories = cD.categories || []; if (sD.settings?.whatsapp) waNumber = '55' + String(sD.settings.whatsapp).replace(/\D/g, ''); const waDefault = 'Olá! Vim pelo site da Zé da Rede e gostaria de conhecer as redes disponíveis.'; document.getElementById('heroWa').href = waLink(waDefault); document.getElementById('waFloat').href = waLink(waDefault); document.getElementById('footerInfo').innerHTML = `
🛏️ ZÉ DA REDE

Redes de qualidade para o seu melhor descanso.

📱 WhatsApp: ${waNumber}

📍 ${sD.settings?.address || ''}

🕐 ${sD.settings?.hours || ''}

`; renderFeatured(); renderPromos(); buildFilters(); renderProducts(products); updateBadge(); } catch (e) { document.getElementById('featuredGrid').innerHTML = '
Erro ao carregar produtos. Recarregue a página.
'; } } function goHome() { currentView = 'home'; document.getElementById('homeView').style.display=''; document.getElementById('catalogView').style.display='none'; window.scrollTo(0,0); } function goCatalog() { currentView = 'catalog'; document.getElementById('homeView').style.display='none'; document.getElementById('catalogView').style.display=''; window.scrollTo(0,0); } function prodCard(p) { const eff = (p.promo && p.promo_price) ? p.promo_price : p.price; const off = (p.promo && p.promo_price) ? Math.round((1 - p.promo_price / p.price) * 100) : 0; const stockCls = p.stock <= 0 ? 'stock-out' : (p.stock <= p.min_stock ? 'stock-low' : 'stock-ok'); const stockTxt = p.stock <= 0 ? '❌ Esgotado' : (p.stock <= p.min_stock ? `⚠️ Últimas ${p.stock} unidades` : `✓ ${p.stock} em estoque`); return `
${galMain(p)}
${p.category_name || 'Redes'}

${p.name}

${(p.short_description || p.description || '').slice(0, 70)}...
${p.promo && p.promo_price ? `${fmt(p.price)}` : ''} ${fmt(eff)} ${off ? `-${off}%` : ''}
${stockTxt}
`; } function renderFeatured() { const f = products.filter(p => p.featured).slice(0, 4); document.getElementById('featuredGrid').innerHTML = f.length ? f.map(prodCard).join('') : '
Nenhum destaque ainda
'; } function renderPromos() { const f = products.filter(p => p.promo && p.promo_price).slice(0, 4); document.getElementById('promoGrid').innerHTML = f.length ? f.map(prodCard).join('') : '
Nenhuma promoção no momento
'; } function buildFilters() { document.getElementById('filterBar').innerHTML = `` + categories.map(c => ``).join('') + ``; } let curCat = '', curSort = ''; function setCat(slug, btn) { curCat = slug; document.querySelectorAll('#filterBar button').forEach(b => b.classList.remove('on')); if (btn) btn.classList.add('on'); loadProducts(); } function sortProducts(v) { curSort = v; loadProducts(); } function renderProducts(list) { document.getElementById('catalogGrid').innerHTML = list.length ? list.map(prodCard).join('') : '
Nenhum produto encontrado
'; } async function loadProducts() { const q = document.getElementById('searchBox').value; let url = '/api/products?'; if (curCat) url += `category=${curCat}&`; if (q) url += `search=${encodeURIComponent(q)}&`; const r = await fetch(url); const d = await r.json(); let list = d.products || []; if (curSort === 'asc') list.sort((a, b) => ((a.promo&&a.promo_price)?a.promo_price:a.price) - ((b.promo&&b.promo_price)?b.promo_price:b.price)); if (curSort === 'desc') list.sort((a, b) => ((b.promo&&b.promo_price)?b.promo_price:b.price) - ((a.promo&&a.promo_price)?a.promo_price:a.price)); renderProducts(list); } function openProduct(id) { curProduct = products.find(p => p.id === id); curQty = 1; const p = curProduct; if (!p) return; const eff = (p.promo && p.promo_price) ? p.promo_price : p.price; document.getElementById('prodModalBody').innerHTML = `
${galMainBig(p)}

${p.name}

${p.category_name || ''}
${p.promo && p.promo_price ? `${fmt(p.price)}` : ''}${fmt(eff)}

${p.description || ''}

${p.material ? `
Material: ${p.material}
` : ''} ${p.size ? `
Tamanho: ${p.size}
` : ''} ${p.weight ? `
Capacidade: ${p.weight}
` : ''} ${p.color ? `
Cor: ${p.color}
` : ''}
Estoque: ${p.stock > 0 ? p.stock + ' unidades' : 'Esgotado'}
1 ${fmt(eff)}
📱 Comprar pelo WhatsApp`; document.getElementById('prodModal').classList.add('show'); } function chQty(d) { curQty = Math.max(1, Math.min(99, curQty + d)); document.getElementById('qtyVal').textContent = curQty; const eff = (curProduct.promo && curProduct.promo_price) ? curProduct.promo_price : curProduct.price; document.getElementById('lineTotal').textContent = fmt(eff * curQty); } function closeModal() { document.getElementById('prodModal').classList.remove('show'); } function addToCart(id) { const item = cart.find(i => i.id === id); const p = products.find(x => x.id === id); if (item) { if (item.qty + 1 > p.stock) return toast('Estoque insuficiente'); item.qty++; } else cart.push({ id, qty: Math.min(1, p.stock) }); saveCart(); toast('✓ Adicionado ao carrinho'); closeModal(); } function saveCart() { localStorage.setItem('zr_cart', JSON.stringify(cart)); updateBadge(); renderCart(); } function updateBadge() { const n = cart.reduce((a, i) => a + i.qty, 0); const b = document.getElementById('cartBadge'); b.textContent = n; b.style.display = n ? 'inline-flex' : 'none'; } function cartCount() { return cart.reduce((a, i) => a + i.qty, 0); } function openCart() { document.getElementById('cartPanel').classList.add('open'); renderCart(); if (cart.length) showCheckout(); } function closeCart() { document.getElementById('cartPanel').classList.remove('open'); } function renderCart() { const box = document.getElementById('cartItems'), foot = document.getElementById('cartFoot'); if (!cart.length) { box.innerHTML = '
🛒

Seu carrinho está vazio.
Que tal uma rede novinha?
'; foot.innerHTML = ''; return; } box.innerHTML = cart.map(i => { const p = products.find(x => x.id === i.id); if (!p) return ''; const eff = (p.promo && p.promo_price) ? p.promo_price : p.price; return `
🛏️

${p.name}

${fmt(eff)} × ${i.qty} = ${fmt(eff * i.qty)}
`; }).join(''); const total = cart.reduce((a, i) => { const p = products.find(x => x.id === i.id); const eff = p ? ((p.promo && p.promo_price) ? p.promo_price : p.price) : 0; return a + eff * i.qty; }, 0); foot.innerHTML = `
Total${fmt(total)}
`; } function rmCart(id) { cart = cart.filter(i => i.id !== id); saveCart(); } // ---- checkout ---- function showCheckout() { const total = cart.reduce((a, i) => { const p = products.find(x => x.id === i.id); const eff = p ? ((p.promo && p.promo_price) ? p.promo_price : p.price) : 0; return a + eff * i.qty; }, 0); document.getElementById('cartItems').innerHTML = `

Finalizar pedido

Total${fmt(total)}
`; document.getElementById('cartFoot').innerHTML = ''; } let coPM = 'pix', coDelivery = 'retirada'; function setPM(m, el) { coPM = m; document.querySelectorAll('[data-pm]').forEach(x => x.classList.remove('on')); el.classList.add('on'); document.getElementById('instBox').style.display = (m === 'credito' || m === 'aprazo') ? 'block' : 'none'; } function setDelivery(d) { coDelivery = d; document.getElementById('lblRet').classList.toggle('on', d === 'retirada'); document.getElementById('lblEnt').classList.toggle('on', d === 'entrega'); document.getElementById('addrFields').style.display = d === 'entrega' ? 'block' : 'none'; } async function submitOrder() { const name = document.getElementById('coName').value.trim(); const phone = document.getElementById('coPhone').value.trim(); if (!name || !phone) return toast('Preencha nome e telefone'); const items = cart.map(i => ({ product_id: i.id, quantity: i.qty })); const body = { customer: { name, phone, address: document.getElementById('coAddr')?.value, neighborhood: document.getElementById('coBairro')?.value, city: document.getElementById('coCidade')?.value }, items, payment_method: coPM, installment_count: (coPM === 'credito' || coPM === 'aprazo') ? parseInt(document.getElementById('coInst')?.value) || 1 : null, delivery: coDelivery, note: document.getElementById('coNote')?.value, }; try { const r = await fetch('/api/public/orders', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) }); const d = await r.json(); if (!d.ok) return toast(d.error || 'Erro ao enviar pedido'); // monta mensagem do WhatsApp const lines = cart.map(i => { const p = products.find(x => x.id === i.id); const eff = (p.promo && p.promo_price) ? p.promo_price : p.price; return `• ${i.qty}x ${p.name} — ${fmt(eff * i.qty)}`; }); const total = cart.reduce((a, i) => { const p = products.find(x => x.id === i.id); const eff = p ? ((p.promo && p.promo_price) ? p.promo_price : p.price) : 0; return a + eff * i.qty; }, 0); const pmNames = { pix: 'PIX', dinheiro: 'Dinheiro', debito: 'Cartão Débito', credito: 'Cartão Crédito', aprazo: 'A Prazo' }; const msg = `Olá, Zé da Rede!\n\nGostaria de fazer um pedido:\n\n${lines.join('\n')}\n\n*Total: ${fmt(d.total)}*\nForma de pagamento: ${pmNames[coPM]}${coPM==='credito'||coPM==='aprazo' ? ` (${body.installment_count}x)` : ''}\nEntrega: ${coDelivery === 'retirada' ? 'Retirada na loja' : 'Entrega'}\n\nPedido nº ${d.orderId}\nAguardo confirmação. 🙂`; localStorage.removeItem('zr_cart'); cart = []; updateBadge(); closeCart(); window.open(waLink(msg), '_blank'); toast('✓ Pedido enviado! Abrindo WhatsApp...'); } catch (e) { toast('Erro de conexão'); } } function toast(msg) { const t = document.getElementById('toast'); t.textContent = msg; t.classList.add('show'); setTimeout(() => t.classList.remove('show'), 2600); } init();